package com.hrm.controller;

import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.captcha.ShearCaptcha;
import com.alibaba.fastjson.JSON;
import com.hrm.utils.ExcelToHtml;
import com.hrm.utils.PPTtoHtml;
import com.hrm.utils.WordToHtml;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/common")
public class CommonController {
    @Value("${hrm.path}")
    private String basePath;

    // 生成验证码并返回给前端，并将验证码保存在session
    @GetMapping("/code")
    public void code(HttpServletRequest request, HttpServletResponse response, Integer type) throws IOException {
        // 定义图形验证码的长和宽
        LineCaptcha captcha = CaptchaUtil.createLineCaptcha(200, 100, 4, 50);
        // 获取验证码
        String code = captcha.getCode();
        System.out.println((type == 1 ? "登录" : "注册") + "code:" + code);
        // 保存到session，用于登录验证，根据前端传来的参数type判断是登录code1还是注册code2
        request.getSession().setAttribute(("code" + type), code);
        //图形验证码写出，也可以写出到流
        response.setContentType("image/jpeg");
        captcha.write(response.getOutputStream());
    }


    // 文件上传到磁盘，同时后台生成.ppt/.xls/.doc的预览文件.html
    @PostMapping("/upload")
    public void upload(MultipartFile file, HttpServletResponse response) throws IOException {
        String filePath = basePath;
        // file是一个临时文件，需要转存到指定位置，否则本次请求完成后临时文件会删除
        //获得原始文件名
        // userId.uuid.fileName.txt
        String originalFilename = file.getOriginalFilename();
        log.info("文件信息2：" + originalFilename);

        // 获取上传文件的用户id
        String userId = originalFilename.substring(0, originalFilename.indexOf("."));
        log.info("上传文件的用户id:" + userId);

        // 获取后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));  // 后缀.jpg

        // 除去原始文件名携带的用户id，得到原文件名
        originalFilename = originalFilename.substring(originalFilename.indexOf(".") + 1);

        // 创建一个目录对象
        File dir = null;
        if (userId != null && !userId.equals("")) {
            filePath += userId + "/";
            log.info("该用户的文件路径：" + filePath);
            dir = new File(filePath);
        } else {
            dir = new File(filePath);
        }

        // 判断当前目录是否存在
        if (!dir.exists()) {
            // 目录不存在，需要创建
            dir.mkdirs();
        }
        Map map = new HashMap();
        try {
            File file1 = new File(filePath + originalFilename);
            file.transferTo(file1);
            // 生成对应的预览文件，即html，目前仅支持.ppt/.doc/.xls
            if (suffix.equals(".ppt")) {
                PPTtoHtml.pptToHtml(filePath, originalFilename, userId);
            } else if (suffix.equals(".doc")) {
                WordToHtml.wordToHtml(filePath, originalFilename, userId);
            } else if (suffix.equals(".xls")) {
                ExcelToHtml.excelToHtml(filePath, originalFilename);
            }
            map.put("code", 200);
            map.put("filename", originalFilename);
            map.put("filetype", suffix);

        } catch (IOException e) {
            e.printStackTrace();
        }
        response.getWriter().write(JSON.toJSONString(map));
    }


}
